package com.gxa.employment.controller;

import com.gxa.employment.common.Result;
import com.gxa.employment.entity.pojo.Major;
import com.gxa.employment.entity.pojo.Manager;
import com.gxa.employment.entity.vo.MajorStatisticsVo;
import com.gxa.employment.exception.BizException;
import com.gxa.employment.service.MajorService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

/**
 * <p>
 * 方向管理表 前端控制器
 * </p>
 *
 * @author author
 * @since 2025-03-25
 */
@RestController
@RequestMapping("/major")
@Tag(name = "方向管理", description = "方向相关操作API")
public class MajorController {

    @Autowired
    private MajorService majorService;


    /**
     * 添加方向接口
     * 用于添加一个新的方向数据
     *
     * @param major 要添加的方向数据，包含方向的详细信息
     * @return 返回操作结果，成功时返回成功结果
     */
    @PostMapping("/add")
    @Operation(summary = "添加方向")
    public Result<Major> add(@RequestBody Major major){
        majorService.save(major);
        return Result.success();
    }
    /**
     * 更新专业方向信息
     * 该接口用于更新传入的Major对象所代表的专业方向信息
     *
     * @param major 包含要更新的专业方向信息的Major对象
     * @return 返回操作结果，成功则返回成功结果
     */
    @PutMapping("/update")
    @Operation(summary = "修改方向")
    public Result<Major> update(@RequestBody Major major){
        majorService.updateById(major);
        return Result.success();
    }

    /**
     * 删除指定ID的管理员记录
     * 通过ID删除对应的管理员数据，并返回操作结果
     *
     * @param id 要删除的管理员记录的ID
     * @return 返回操作结果，成功则返回成功标识
     */
    @DeleteMapping("/delete")
    @Operation(summary = "修改方向")
    public Result<Major> delete(@RequestParam Integer id){
        majorService.removeById(id);
        return Result.success();
    }

    /**
     * 根据id查询方向详情
     * 通过传入的id，查询并返回对应的方向详情信息
     *
     * @param id 方向的id
     * @return 查询成功返回包含方向详情的Result对象，失败返回错误信息
     */
    @GetMapping("/getById")
    @Operation(summary = "根据id查询方向详情")
    public Result<Major> getById(@RequestParam Integer id){
        return Result.success(majorService.getById(id));
    }

    /**
     * 获取方向列表
     * 该接口用于获取所有的方向列表数据
     *
     * @return 返回包含方向列表的Result对象
     */
    @GetMapping("/list")
    @Operation(summary = "方向列表")
    public Result<List<Major>> list(){
        return Result.success(majorService.list());
    }

    /**
     * 方向统计图信息
     * @param year
     * @return
     */
    @GetMapping("/getMajorStatistics")
    @Operation(summary = "方向统计图信息")
    public Result<MajorStatisticsVo> getMajorStatistics(@RequestParam String year) throws BizException {
        return Result.success(majorService.getMajorStatistics(year));
    }

}
